aboutsummaryrefslogtreecommitdiffstats
path: root/packages/web/app/api/trpc/[trpc]
diff options
context:
space:
mode:
authorMohamedBassem <me@mbassem.com>2024-02-12 22:50:43 +0000
committerMohamedBassem <me@mbassem.com>2024-02-12 22:50:43 +0000
commitb00d2b360d8000edcd9bfa82673ca322a9ac6d1a (patch)
treee939db73131a9a6fd04b249b8adac44816dad8b2 /packages/web/app/api/trpc/[trpc]
parent6e6d2c3cbc860d0024e9631b01eeef55b47933a5 (diff)
downloadkarakeep-b00d2b360d8000edcd9bfa82673ca322a9ac6d1a.tar.zst
hack: Hack API key support in the context creation of TRPC
Diffstat (limited to 'packages/web/app/api/trpc/[trpc]')
-rw-r--r--packages/web/app/api/trpc/[trpc]/route.ts18
1 files changed, 17 insertions, 1 deletions
diff --git a/packages/web/app/api/trpc/[trpc]/route.ts b/packages/web/app/api/trpc/[trpc]/route.ts
index 4d108604..e04539a9 100644
--- a/packages/web/app/api/trpc/[trpc]/route.ts
+++ b/packages/web/app/api/trpc/[trpc]/route.ts
@@ -1,12 +1,28 @@
import { fetchRequestHandler } from "@trpc/server/adapters/fetch";
import { appRouter } from "@/server/api/routers/_app";
import { createContext } from "@/server/api/client";
+import { authenticateApiKey } from "@/server/auth";
const handler = (req: Request) =>
fetchRequestHandler({
endpoint: "/api/trpc",
req,
router: appRouter,
- createContext,
+ createContext: async (opts) => {
+ // TODO: This is a hack until we offer a proper REST API instead of the trpc based one.
+ // Check if the request has an Authorization token, if it does, assume that API key authentication is requested.
+ const authorizationHeader = opts.req.headers.get("Authorization");
+ if (authorizationHeader && authorizationHeader.startsWith("Bearer ")) {
+ const token = authorizationHeader.split(" ")[1];
+ try {
+ const user = await authenticateApiKey(token);
+ return { user };
+ } catch (e) {
+ // Fallthrough to cookie-based auth
+ }
+ }
+
+ return createContext();
+ },
});
export { handler as GET, handler as POST };